package com.ffcs.web.daos.interfaces;

import java.util.List;

/**
 * TODO 修改注释
 */
public interface IBaseDao<T, PK extends java.io.Serializable> {
	
	//-----------------------------------------------查询POJO-----------------------------------------------------//

	/**
	 * 根据ID获取对象.
	 */
	public abstract T get(PK id);

	/**
	 * 获取全部对象.
	 */
	public abstract List<T> getAll();

	/**
	 * 获取全部对象,带排序字段与升降序参数.
	 */
	public abstract List<T> getAllWithOrder(String orderBy, boolean isAsc);

	/**
	 * 根据属性名和属性值查询对象.
	 * 
	 * @return 符合条件的对象列表
	 */
	public abstract List<T> findByPropertyName(String propertyName, Object value);

	/**
	 * 根据属性名和属性值查询对象,带排序参数.
	 */
	public abstract List<T> findByPropertyNameWithOrder(String propertyName, Object value, String orderBy, boolean isAsc);

    /**
     * 暂时不开发
     *
     * 判断对象某些属性的值在数据库中是否唯一.
     *
     * @param uniquePropertyNames
     *                在POJO里不能重复的属性列表,以逗号分割 如"name,loginid,password"
     */
    //public abstract <T> boolean isUnique(Object entity,String uniquePropertyNames);

	/**
	 * 根据属性名和属性值查询唯一对象.
	 * 
	 * @return 符合条件的唯一对象 or null if not found.
	 */
	public abstract T findUniqueByPropertyName(String propertyName, Object value);


    /**
     * 根据Example查询对象
     */
    public abstract List<T> findByExample(T Example);

	//-----------------------------------------------增加 或 更新 POJO-----------------------------------------------------//
	
	/**
	 * 保存对象.
	 */
	public abstract void save(T entity);
	
	//-----------------------------------------------删除 POJO-----------------------------------------------------//

	/**
	 * 删除对象.
	 */
	public abstract void remove(T entity);

	/**
	 * 批量删除
	 */
	public abstract void removeObjects(List<T> entities);

	/**
	 * 根据ID删除对象.
	 */
	public abstract void removeById(PK id);
}
